/*
 * CUCA_engine.h
 *
 *  Created on: 21/06/2012
 *      Author: utnso
 */

#ifndef CUCA_ENGINE_H_
#define CUCA_ENGINE_H_

#include <stdbool.h>
#include <memcached/engine.h>
#include <memcached/util.h>
#include <memcached/visibility.h>
#include "libMat.h"
#include "libArchivoConfiguracion.h"
#include <sys/mman.h>
#include <unistd.h>
#include "libEscribirInforme.h"
#include <mcheck.h>
#include "libArchivoLog.h"

/*
 * Esta es una estructura utilizada para almacenar y respresentar un elemento almacenado en la cache
 */
typedef struct {
	memCache_t* vectorCache;
	void* ptrData;
	uint8_t ocupado;
} t_CUCA_item;

/*
 * Esta es una estructura custom que utilizo para almacenar la configuración que me pasa memcached
 */
typedef struct {
	size_t cache_max_size;
	size_t block_size_max;
	size_t chunk_size;
} t_CUCA_config;

/*
 * Esta es la estructura que utilizo para representar el engine, para que memcached pueda manipularla el
 * primer campo de esta tiene que ser ENGINE_HANDLE_V1 engine; el resto de los campos pueden ser los que querramos
 */
typedef struct {
	ENGINE_HANDLE_V1 engine;
//GET_SERVER_API get_server_api;
//t_CUCA_config config;
} t_CUCA_ng;

t_CUCA_item* buscarYOcuparVectorItem();
// Esta funcion es escencial ya que es la que busca memcached para ejecutar cuando levanta la shared library
MEMCACHED_PUBLIC_API ENGINE_ERROR_CODE create_instance(uint64_t interface, GET_SERVER_API get_server_api, ENGINE_HANDLE **handle);

#endif /* CUCA_ENGINE_H_ */
